// Define the overlay, derived from google.maps.OverlayView
// Thanks to Marc Ridey for the example: http://blog.mridey.com/2009/09/label-overlay-example-for-google-maps.html
function Label(opt_options) {

	// Initialization
	this.setValues(opt_options);

	// Label specific
	var span = this.span_ = document.createElement('span');
	span.className = 'mapLabel';
	/*
	span.style.cssText = 'position: relative; left: -50%; top: -8px; ' +
								'white-space: nowrap; border: 1px solid blue; ' +
								'z-index: 999; ' +
								'padding: 2px; background-color: white';

	
	span.style.cssText = 'position: relative; left: -50%; top: -8px; ' +
								'white-space: nowrap; border: 1px solid #195CBF; ' +
								'z-index: 999; ' +
								'background:rgb(0, 0, 0); ' +
								'background:rgba(0, 0, 0, 0.4); ' +
								'filter: alpha(opacity = 40); ' +
								'border-radius:5px; ' +
								'-moz-border-radius:5px; ' +
								'padding: 2px; color:white; font-weight:bold;';
	*/							
	var div = this.div_ = document.createElement('div');
	div.appendChild(span);
	div.style.cssText = 'position: absolute; display: none';
};

Label.prototype = new google.maps.OverlayView;

// Implement onAdd
Label.prototype.onAdd = function() {

	var pane = this.getPanes().overlayLayer;
	pane.appendChild(this.div_);

	// Ensures the label is redrawn if the text or position is changed.
	var me = this;
	this.listeners_ = [
			google.maps.event.addListener(this, 'position_changed',
				function() { me.draw(); }),
				google.maps.event.addListener(this, 'text_changed',
				function() { me.draw(); })
		];
};

// Implement onRemove
Label.prototype.onRemove = function() {
	
	this.div_.parentNode.removeChild(this.div_);
	
	 // Label is removed from the map, stop updating its position/text.
	for (var i = 0, I = this.listeners_.length; i < I; ++i) {
		google.maps.event.removeListener(this.listeners_[i]);
	}
};
	
// Implement draw
Label.prototype.draw = function() {

	var projection = this.getProjection();
	var position = projection.fromLatLngToDivPixel(this.get('position'));
	
	var div = this.div_;
	div.style.left = position.x + 'px';
	div.style.top = position.y + 'px';
	div.style.display = 'block';
	
	//this.span_.innerHTML = this.get('text').toString();
	this.span_.innerHTML = labelText;
};
